package org.thinker.point;

import org.thinker.util.GetKm;

public class PointVO implements Comparable<PointVO> {

	private String name;
	private Double longitude;
	private Double latitude;

	public PointVO(String[] arr) throws RuntimeException {
		this(arr[0], new Double(arr[1]), new Double(arr[2]));

	}

	public PointVO(String name, Double latitude, Double longitude) {
		this.name = name;
		this.latitude = latitude;
		this.longitude = longitude;
	}

	public PointVO() {
	}

	

	@Override
	public String toString() {
		return name + ":" + latitude + ":" + longitude  + "\n";
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		PointVO other = (PointVO) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Double getLongitude() {
		return longitude;
	}

	public void setLongitude(Double longitude) {
		this.longitude = longitude;
	}

	public Double getLatitude() {
		return latitude;
	}

	public void setLatitude(Double latitude) {
		this.latitude = latitude;
	}

	@Override
	public int compareTo(PointVO other) {

		return this.name.compareTo(other.name);
	}
	
	public ResultVO calcDistance(PointVO vo){
		Double distance = (double) (Math.sqrt(Math.pow(this.latitude- vo.getLatitude(),2)
									+Math.pow(this.longitude - vo.getLongitude(), 2)));
		return new ResultVO(this.name, GetKm.change(distance));
	}

}
